package org.apache.james.mime4j.field.datetime.parser;

import java.io.IOException;
import java.io.PrintStream;

public class DateTimeParserTokenManager
  implements DateTimeParserConstants
{
  static int commentNest;
  static final long[] jjbitVec0;
  public static final int[] jjnewLexState;
  static final int[] jjnextStates;
  public static final String[] jjstrLiteralImages;
  static final long[] jjtoMore;
  static final long[] jjtoSkip;
  static final long[] jjtoSpecial;
  static final long[] jjtoToken;
  public static final String[] lexStateNames;
  protected char curChar;
  int curLexState;
  public PrintStream debugStream;
  int defaultLexState;
  StringBuffer image;
  protected SimpleCharStream input_stream;
  int jjimageLen;
  int jjmatchedKind;
  int jjmatchedPos;
  int jjnewStateCnt;
  int jjround;
  private final int[] jjrounds;
  private final int[] jjstateSet;
  int lengthOfMatch;

  static
  {
    long[] arrayOfLong1 = new long[4];
    arrayOfLong1[0] = 0L;
    arrayOfLong1[1] = 0L;
    arrayOfLong1[2] = -1L;
    arrayOfLong1[3] = -1L;
    jjbitVec0 = arrayOfLong1;
    jjnextStates = new int[0];
    String[] arrayOfString1 = new String[49];
    arrayOfString1[0] = "";
    arrayOfString1[1] = "\r";
    arrayOfString1[2] = "\n";
    arrayOfString1[3] = ",";
    arrayOfString1[4] = "Mon";
    arrayOfString1[5] = "Tue";
    arrayOfString1[6] = "Wed";
    arrayOfString1[7] = "Thu";
    arrayOfString1[8] = "Fri";
    arrayOfString1[9] = "Sat";
    arrayOfString1[10] = "Sun";
    arrayOfString1[11] = "Jan";
    arrayOfString1[12] = "Feb";
    arrayOfString1[13] = "Mar";
    arrayOfString1[14] = "Apr";
    arrayOfString1[15] = "May";
    arrayOfString1[16] = "Jun";
    arrayOfString1[17] = "Jul";
    arrayOfString1[18] = "Aug";
    arrayOfString1[19] = "Sep";
    arrayOfString1[20] = "Oct";
    arrayOfString1[21] = "Nov";
    arrayOfString1[22] = "Dec";
    arrayOfString1[23] = ":";
    arrayOfString1[24] = null;
    arrayOfString1[25] = "UT";
    arrayOfString1[26] = "GMT";
    arrayOfString1[27] = "EST";
    arrayOfString1[28] = "EDT";
    arrayOfString1[29] = "CST";
    arrayOfString1[30] = "CDT";
    arrayOfString1[31] = "MST";
    arrayOfString1[32] = "MDT";
    arrayOfString1[33] = "PST";
    arrayOfString1[34] = "PDT";
    arrayOfString1[35] = null;
    arrayOfString1[36] = null;
    arrayOfString1[37] = null;
    arrayOfString1[38] = null;
    arrayOfString1[39] = null;
    arrayOfString1[40] = null;
    arrayOfString1[41] = null;
    arrayOfString1[42] = null;
    arrayOfString1[43] = null;
    arrayOfString1[44] = null;
    arrayOfString1[45] = null;
    arrayOfString1[46] = null;
    arrayOfString1[47] = null;
    arrayOfString1[48] = null;
    jjstrLiteralImages = arrayOfString1;
    String[] arrayOfString2 = new String[3];
    arrayOfString2[0] = "DEFAULT";
    arrayOfString2[1] = "INCOMMENT";
    arrayOfString2[2] = "NESTED_COMMENT";
    lexStateNames = arrayOfString2;
    int[] arrayOfInt = new int[49];
    arrayOfInt[0] = -1;
    arrayOfInt[1] = -1;
    arrayOfInt[2] = -1;
    arrayOfInt[3] = -1;
    arrayOfInt[4] = -1;
    arrayOfInt[5] = -1;
    arrayOfInt[6] = -1;
    arrayOfInt[7] = -1;
    arrayOfInt[8] = -1;
    arrayOfInt[9] = -1;
    arrayOfInt[10] = -1;
    arrayOfInt[11] = -1;
    arrayOfInt[12] = -1;
    arrayOfInt[13] = -1;
    arrayOfInt[14] = -1;
    arrayOfInt[15] = -1;
    arrayOfInt[16] = -1;
    arrayOfInt[17] = -1;
    arrayOfInt[18] = -1;
    arrayOfInt[19] = -1;
    arrayOfInt[20] = -1;
    arrayOfInt[21] = -1;
    arrayOfInt[22] = -1;
    arrayOfInt[23] = -1;
    arrayOfInt[24] = -1;
    arrayOfInt[25] = -1;
    arrayOfInt[26] = -1;
    arrayOfInt[27] = -1;
    arrayOfInt[28] = -1;
    arrayOfInt[29] = -1;
    arrayOfInt[30] = -1;
    arrayOfInt[31] = -1;
    arrayOfInt[32] = -1;
    arrayOfInt[33] = -1;
    arrayOfInt[34] = -1;
    arrayOfInt[35] = -1;
    arrayOfInt[36] = -1;
    arrayOfInt[37] = 1;
    arrayOfInt[38] = 0;
    arrayOfInt[39] = -1;
    arrayOfInt[40] = 2;
    arrayOfInt[41] = -1;
    arrayOfInt[42] = -1;
    arrayOfInt[43] = -1;
    arrayOfInt[44] = -1;
    arrayOfInt[45] = -1;
    arrayOfInt[46] = -1;
    arrayOfInt[47] = -1;
    arrayOfInt[48] = -1;
    jjnewLexState = arrayOfInt;
    long[] arrayOfLong2 = new long[1];
    arrayOfLong2[0] = -1L;
    jjtoToken = arrayOfLong2;
    long[] arrayOfLong3 = new long[1];
    arrayOfLong3[0] = 0L;
    jjtoSkip = arrayOfLong3;
    long[] arrayOfLong4 = new long[1];
    arrayOfLong4[0] = 0L;
    jjtoSpecial = arrayOfLong4;
    long[] arrayOfLong5 = new long[1];
    arrayOfLong5[0] = 0L;
    jjtoMore = arrayOfLong5;
  }

  public DateTimeParserTokenManager(SimpleCharStream paramSimpleCharStream)
  {
    this.debugStream = System.out;
    this.jjrounds = new int[4];
    this.jjstateSet = new int[8];
    this.curLexState = 0;
    this.defaultLexState = 0;
    this.input_stream = paramSimpleCharStream;
  }

  public DateTimeParserTokenManager(SimpleCharStream paramSimpleCharStream, int paramInt)
  {
    this(paramSimpleCharStream);
    SwitchTo(paramInt);
  }

  private final void ReInitRounds()
  {
    this.jjround = -2147483647;
    int i = 4;
    while (true)
    {
      int j = i - 1;
      if (i <= 0)
        return;
      this.jjrounds[j] = -2147483648;
      i = j;
    }
  }

  private final void jjAddStates(int paramInt1, int paramInt2)
  {
    while (true)
    {
      int[] arrayOfInt = this.jjstateSet;
      int i = this.jjnewStateCnt;
      this.jjnewStateCnt = (i + 1);
      arrayOfInt[i] = jjnextStates[paramInt1];
      int j = paramInt1 + 1;
      if (paramInt1 == paramInt2)
        return;
      paramInt1 = j;
    }
  }

  private final void jjCheckNAdd(int paramInt)
  {
    if (this.jjrounds[paramInt] != this.jjround)
    {
      int[] arrayOfInt = this.jjstateSet;
      int i = this.jjnewStateCnt;
      this.jjnewStateCnt = (i + 1);
      arrayOfInt[i] = paramInt;
      this.jjrounds[paramInt] = this.jjround;
    }
  }

  private final void jjCheckNAddStates(int paramInt)
  {
    jjCheckNAdd(jjnextStates[paramInt]);
    jjCheckNAdd(jjnextStates[(paramInt + 1)]);
  }

  private final void jjCheckNAddStates(int paramInt1, int paramInt2)
  {
    while (true)
    {
      jjCheckNAdd(jjnextStates[paramInt1]);
      int i = paramInt1 + 1;
      if (paramInt1 == paramInt2)
        return;
      paramInt1 = i;
    }
  }

  private final void jjCheckNAddTwoStates(int paramInt1, int paramInt2)
  {
    jjCheckNAdd(paramInt1);
    jjCheckNAdd(paramInt2);
  }

  private final int jjMoveNfa_0(int paramInt1, int paramInt2)
  {
    long l2;
    int i = 0;
    this.jjnewStateCnt = 4;
    int j = 1;
    this.jjstateSet[0] = paramInt1;
    int k = 2147483647;
    int l = 1 + this.jjround;
    this.jjround = l;
    if (l == 2147483647)
      ReInitRounds();
    if (this.curChar < '@')
    {
      l2 = 1L << this.curChar;
      do
      {
        int[] arrayOfInt3 = this.jjstateSet;
        switch (???[(--j)])
        {
        case 1:
        default:
        case 0:
        case 2:
        case 3:
        }
      }
      while (j != i);
    }
    while (true)
    {
      while (true)
      {
        do
          while (true)
          {
            do
              while (true)
              {
                do
                  while (true)
                  {
                    while (true)
                    {
                      if (k != 2147483647)
                      {
                        this.jjmatchedKind = k;
                        this.jjmatchedPos = paramInt2;
                        k = 2147483647;
                      }
                      ++paramInt2;
                      j = this.jjnewStateCnt;
                      this.jjnewStateCnt = i;
                      i = 4 - i;
                      if (j != i)
                        break label421;
                      label160: return paramInt2;
                      if ((0x0 & l2) == 0L)
                        break;
                      if (k > 46)
                        k = 46;
                      jjCheckNAdd(3);
                    }
                    if ((0x200 & l2) == 0L)
                      break;
                    if (k > 36)
                      k = 36;
                    jjCheckNAdd(2);
                  }
                while (((0x0 & l2) == 0L) || (k <= 24));
                k = 24;
              }
            while ((0x200 & l2) == 0L);
            k = 36;
            jjCheckNAdd(2);
          }
        while ((0x0 & l2) == 0L);
        k = 46;
        jjCheckNAdd(3);
      }
      if (this.curChar < 128)
      {
        long l1 = 1L << (0x3F & this.curChar);
        int[] arrayOfInt2 = this.jjstateSet;
        switch (???[(--j)])
        {
        default:
        case 0:
        }
        while (true)
        {
          do
            while (true)
              if (j != i);
          while ((0x7FFFBFE & l1) == 0L);
          k = 35;
        }
      }
      ((0xFF & this.curChar) >> '\6');
      (1L << (0x3F & this.curChar));
      do
      {
        int[] arrayOfInt1 = this.jjstateSet;
        ???[(--j)];
      }
      while (j != i);
    }
    try
    {
      label421: this.curChar = this.input_stream.readChar();
    }
    catch (IOException localIOException)
    {
      break label160:
    }
  }

  private final int jjMoveNfa_1(int paramInt1, int paramInt2)
  {
    int i = 0;
    this.jjnewStateCnt = 3;
    int j = 1;
    this.jjstateSet[0] = paramInt1;
    int k = 2147483647;
    int l = 1 + this.jjround;
    this.jjround = l;
    if (l == 2147483647)
      ReInitRounds();
    if (this.curChar < '@')
    {
      (1L << this.curChar);
      int[] arrayOfInt4 = this.jjstateSet;
      switch (???[(--j)])
      {
      default:
      case 0:
      case 1:
      }
      while (true)
      {
        do
          while (true)
          {
            do
            {
              if (j != i);
              if (k != 2147483647)
              {
                this.jjmatchedKind = k;
                this.jjmatchedPos = paramInt2;
                k = 2147483647;
              }
              ++paramInt2;
              j = this.jjnewStateCnt;
              this.jjnewStateCnt = i;
              i = 3 - i;
              if (j != i)
                break label457;
              label152: return paramInt2;
            }
            while (k <= 41);
            k = 41;
          }
        while (k <= 39);
        k = 39;
      }
    }
    if (this.curChar < 128)
    {
      (1L << (0x3F & this.curChar));
      int[] arrayOfInt2 = this.jjstateSet;
      switch (???[(--j)])
      {
      default:
      case 0:
      case 1:
      case 2:
      }
      while (true)
      {
        do
          while (true)
          {
            do
              while (true)
              {
                do
                {
                  while (true)
                    if (j != i);
                  if (k > 41)
                    k = 41;
                }
                while (this.curChar != '\\');
                int[] arrayOfInt3 = this.jjstateSet;
                int i2 = this.jjnewStateCnt;
                this.jjnewStateCnt = (i2 + 1);
                arrayOfInt3[i2] = 1;
              }
            while (k <= 39);
            k = 39;
          }
        while (k <= 41);
        k = 41;
      }
    }
    int i1 = (0xFF & this.curChar) >> '\6';
    long l1 = 1L << (0x3F & this.curChar);
    int[] arrayOfInt1 = this.jjstateSet;
    switch (???[(--j)])
    {
    default:
    case 0:
    case 1:
    }
    while (true)
    {
      do
        while (true)
        {
          do
            while (true)
              if (j != i);
          while (((l1 & jjbitVec0[i1]) == 0L) || (k <= 41));
          k = 41;
        }
      while (((l1 & jjbitVec0[i1]) == 0L) || (k <= 39));
      k = 39;
    }
    try
    {
      label457: this.curChar = this.input_stream.readChar();
    }
    catch (IOException localIOException)
    {
      break label152:
    }
  }

  private final int jjMoveNfa_2(int paramInt1, int paramInt2)
  {
    int i = 0;
    this.jjnewStateCnt = 3;
    int j = 1;
    this.jjstateSet[0] = paramInt1;
    int k = 2147483647;
    int l = 1 + this.jjround;
    this.jjround = l;
    if (l == 2147483647)
      ReInitRounds();
    if (this.curChar < '@')
    {
      (1L << this.curChar);
      int[] arrayOfInt4 = this.jjstateSet;
      switch (???[(--j)])
      {
      default:
      case 0:
      case 1:
      }
      while (true)
      {
        do
          while (true)
          {
            do
            {
              if (j != i);
              if (k != 2147483647)
              {
                this.jjmatchedKind = k;
                this.jjmatchedPos = paramInt2;
                k = 2147483647;
              }
              ++paramInt2;
              j = this.jjnewStateCnt;
              this.jjnewStateCnt = i;
              i = 3 - i;
              if (j != i)
                break label457;
              label152: return paramInt2;
            }
            while (k <= 45);
            k = 45;
          }
        while (k <= 42);
        k = 42;
      }
    }
    if (this.curChar < 128)
    {
      (1L << (0x3F & this.curChar));
      int[] arrayOfInt2 = this.jjstateSet;
      switch (???[(--j)])
      {
      default:
      case 0:
      case 1:
      case 2:
      }
      while (true)
      {
        do
          while (true)
          {
            do
              while (true)
              {
                do
                {
                  while (true)
                    if (j != i);
                  if (k > 45)
                    k = 45;
                }
                while (this.curChar != '\\');
                int[] arrayOfInt3 = this.jjstateSet;
                int i2 = this.jjnewStateCnt;
                this.jjnewStateCnt = (i2 + 1);
                arrayOfInt3[i2] = 1;
              }
            while (k <= 42);
            k = 42;
          }
        while (k <= 45);
        k = 45;
      }
    }
    int i1 = (0xFF & this.curChar) >> '\6';
    long l1 = 1L << (0x3F & this.curChar);
    int[] arrayOfInt1 = this.jjstateSet;
    switch (???[(--j)])
    {
    default:
    case 0:
    case 1:
    }
    while (true)
    {
      do
        while (true)
        {
          do
            while (true)
              if (j != i);
          while (((l1 & jjbitVec0[i1]) == 0L) || (k <= 45));
          k = 45;
        }
      while (((l1 & jjbitVec0[i1]) == 0L) || (k <= 42));
      k = 42;
    }
    try
    {
      label457: this.curChar = this.input_stream.readChar();
    }
    catch (IOException localIOException)
    {
      break label152:
    }
  }

  private final int jjMoveStringLiteralDfa0_0()
  {
    int i;
    switch (this.curChar)
    {
    default:
      i = jjMoveNfa_0(0, 0);
    case '\n':
    case '\r':
    case '(':
    case ',':
    case ':':
    case 'A':
    case 'C':
    case 'D':
    case 'E':
    case 'F':
    case 'G':
    case 'J':
    case 'M':
    case 'N':
    case 'O':
    case 'P':
    case 'S':
    case 'T':
    case 'U':
    case 'W':
    }
    while (true)
    {
      while (true)
      {
        while (true)
        {
          while (true)
          {
            while (true)
            {
              while (true)
              {
                while (true)
                {
                  while (true)
                  {
                    while (true)
                    {
                      while (true)
                      {
                        while (true)
                        {
                          while (true)
                          {
                            while (true)
                            {
                              while (true)
                              {
                                while (true)
                                {
                                  while (true)
                                  {
                                    while (true)
                                    {
                                      while (true)
                                      {
                                        while (true)
                                        {
                                          while (true)
                                          {
                                            return i;
                                            i = jjStopAtPos(0, 2);
                                          }
                                          i = jjStopAtPos(0, 1);
                                        }
                                        i = jjStopAtPos(0, 37);
                                      }
                                      i = jjStopAtPos(0, 3);
                                    }
                                    i = jjStopAtPos(0, 23);
                                  }
                                  i = jjMoveStringLiteralDfa1_0(278528L);
                                }
                                i = jjMoveStringLiteralDfa1_0(1610612736L);
                              }
                              i = jjMoveStringLiteralDfa1_0(4194304L);
                            }
                            i = jjMoveStringLiteralDfa1_0(402653184L);
                          }
                          i = jjMoveStringLiteralDfa1_0(4352L);
                        }
                        i = jjMoveStringLiteralDfa1_0(67108864L);
                      }
                      i = jjMoveStringLiteralDfa1_0(198656L);
                    }
                    i = jjMoveStringLiteralDfa1_0(-2147442672L);
                  }
                  i = jjMoveStringLiteralDfa1_0(2097152L);
                }
                i = jjMoveStringLiteralDfa1_0(1048576L);
              }
              i = jjMoveStringLiteralDfa1_0(0L);
            }
            i = jjMoveStringLiteralDfa1_0(525824L);
          }
          i = jjMoveStringLiteralDfa1_0(160L);
        }
        i = jjMoveStringLiteralDfa1_0(33554432L);
      }
      i = jjMoveStringLiteralDfa1_0(64L);
    }
  }

  private final int jjMoveStringLiteralDfa0_1()
  {
    int i;
    switch (this.curChar)
    {
    default:
      i = jjMoveNfa_1(0, 0);
    case '(':
    case ')':
    }
    while (true)
    {
      while (true)
      {
        return i;
        i = jjStopAtPos(0, 40);
      }
      i = jjStopAtPos(0, 38);
    }
  }

  private final int jjMoveStringLiteralDfa0_2()
  {
    int i;
    switch (this.curChar)
    {
    default:
      i = jjMoveNfa_2(0, 0);
    case '(':
    case ')':
    }
    while (true)
    {
      while (true)
      {
        return i;
        i = jjStopAtPos(0, 43);
      }
      i = jjStopAtPos(0, 44);
    }
  }

  private final int jjMoveStringLiteralDfa1_0(long paramLong)
  {
    try
    {
      this.curChar = this.input_stream.readChar();
      switch (this.curChar)
      {
      default:
        i = jjStartNfa_0(0, paramLong);
        return i;
      case 'D':
      case 'M':
      case 'S':
      case 'T':
      case 'a':
      case 'c':
      case 'e':
      case 'h':
      case 'o':
      case 'p':
      case 'r':
      case 'u':
      }
    }
    catch (IOException localIOException)
    {
      while (true)
      {
        while (true)
        {
          while (true)
          {
            while (true)
            {
              while (true)
              {
                while (true)
                {
                  while (true)
                  {
                    while (true)
                    {
                      do
                        while (true)
                        {
                          while (true)
                          {
                            while (true)
                            {
                              while (true)
                              {
                                jjStopStringLiteralDfa_0(0, paramLong);
                                i = 1;
                              }
                              i = jjMoveStringLiteralDfa2_0(paramLong, 1342177280L);
                            }
                            i = jjMoveStringLiteralDfa2_0(paramLong, 67108864L);
                          }
                          i = jjMoveStringLiteralDfa2_0(paramLong, -1476395008L);
                        }
                      while ((0x2000000 & paramLong) == 0L);
                      i = jjStopAtPos(1, 25);
                    }
                    i = jjMoveStringLiteralDfa2_0(paramLong, 43520L);
                  }
                  i = jjMoveStringLiteralDfa2_0(paramLong, 1048576L);
                }
                i = jjMoveStringLiteralDfa2_0(paramLong, 4722752L);
              }
              i = jjMoveStringLiteralDfa2_0(paramLong, 128L);
            }
            i = jjMoveStringLiteralDfa2_0(paramLong, 2097168L);
          }
          i = jjMoveStringLiteralDfa2_0(paramLong, 16384L);
        }
        i = jjMoveStringLiteralDfa2_0(paramLong, 256L);
      }
      int i = jjMoveStringLiteralDfa2_0(paramLong, 459808L);
    }
  }

  private final int jjMoveStringLiteralDfa2_0(long paramLong1, long paramLong2)
  {
    int i;
    long l = paramLong2 & paramLong1;
    if (l == 0L)
    {
      i = jjStartNfa_0(0, paramLong1);
      return i;
    }
    try
    {
      this.curChar = this.input_stream.readChar();
      switch (this.curChar)
      {
      default:
        i = jjStartNfa_0(1, l);
      case 'T':
      case 'b':
      case 'c':
      case 'd':
      case 'e':
      case 'g':
      case 'i':
      case 'l':
      case 'n':
      case 'p':
      case 'r':
      case 't':
      case 'u':
      case 'v':
      case 'y':
      }
    }
    catch (IOException localIOException)
    {
      do
        while (true)
        {
          do
            while (true)
            {
              do
                while (true)
                {
                  do
                    while (true)
                    {
                      while (true)
                      {
                        do
                          while (true)
                          {
                            while (true)
                            {
                              do
                                while (true)
                                {
                                  do
                                    while (true)
                                    {
                                      while (true)
                                      {
                                        while (true)
                                        {
                                          while (true)
                                          {
                                            do
                                              while (true)
                                              {
                                                do
                                                  while (true)
                                                  {
                                                    do
                                                      while (true)
                                                      {
                                                        do
                                                          while (true)
                                                          {
                                                            do
                                                              while (true)
                                                              {
                                                                do
                                                                  while (true)
                                                                  {
                                                                    do
                                                                      while (true)
                                                                      {
                                                                        do
                                                                          while (true)
                                                                          {
                                                                            while (true)
                                                                            {
                                                                              while (true)
                                                                              {
                                                                                while (true)
                                                                                {
                                                                                  while (true)
                                                                                  {
                                                                                    while (true)
                                                                                    {
                                                                                      while (true)
                                                                                      {
                                                                                        while (true)
                                                                                        {
                                                                                          while (true)
                                                                                          {
                                                                                            jjStopStringLiteralDfa_0(1, l);
                                                                                            i = 2;
                                                                                          }
                                                                                          if ((0x4000000 & l) == 0L)
                                                                                            break;
                                                                                          i = jjStopAtPos(2, 26);
                                                                                        }
                                                                                        if ((0x8000000 & l) == 0L)
                                                                                          break;
                                                                                        i = jjStopAtPos(2, 27);
                                                                                      }
                                                                                      if ((0x10000000 & l) == 0L)
                                                                                        break;
                                                                                      i = jjStopAtPos(2, 28);
                                                                                    }
                                                                                    if ((0x20000000 & l) == 0L)
                                                                                      break;
                                                                                    i = jjStopAtPos(2, 29);
                                                                                  }
                                                                                  if ((0x40000000 & l) == 0L)
                                                                                    break;
                                                                                  i = jjStopAtPos(2, 30);
                                                                                }
                                                                                if ((0x80000000 & l) == 0L)
                                                                                  break;
                                                                                i = jjStopAtPos(2, 31);
                                                                              }
                                                                              if ((0x0 & l) == 0L)
                                                                                break;
                                                                              i = jjStopAtPos(2, 32);
                                                                            }
                                                                            if ((0x0 & l) == 0L)
                                                                              break;
                                                                            i = jjStopAtPos(2, 33);
                                                                          }
                                                                        while ((0x0 & l) == 0L);
                                                                        i = jjStopAtPos(2, 34);
                                                                      }
                                                                    while ((0x1000 & l) == 0L);
                                                                    i = jjStopAtPos(2, 12);
                                                                  }
                                                                while ((0x400000 & l) == 0L);
                                                                i = jjStopAtPos(2, 22);
                                                              }
                                                            while ((0x40 & l) == 0L);
                                                            i = jjStopAtPos(2, 6);
                                                          }
                                                        while ((0x20 & l) == 0L);
                                                        i = jjStopAtPos(2, 5);
                                                      }
                                                    while ((0x40000 & l) == 0L);
                                                    i = jjStopAtPos(2, 18);
                                                  }
                                                while ((0x100 & l) == 0L);
                                                i = jjStopAtPos(2, 8);
                                              }
                                            while ((0x20000 & l) == 0L);
                                            i = jjStopAtPos(2, 17);
                                          }
                                          if ((0x10 & l) == 0L)
                                            break;
                                          i = jjStopAtPos(2, 4);
                                        }
                                        if ((0x400 & l) == 0L)
                                          break;
                                        i = jjStopAtPos(2, 10);
                                      }
                                      if ((0x800 & l) == 0L)
                                        break;
                                      i = jjStopAtPos(2, 11);
                                    }
                                  while ((0x10000 & l) == 0L);
                                  i = jjStopAtPos(2, 16);
                                }
                              while ((0x80000 & l) == 0L);
                              i = jjStopAtPos(2, 19);
                            }
                            if ((0x2000 & l) == 0L)
                              break;
                            i = jjStopAtPos(2, 13);
                          }
                        while ((0x4000 & l) == 0L);
                        i = jjStopAtPos(2, 14);
                      }
                      if ((0x200 & l) == 0L)
                        break;
                      i = jjStopAtPos(2, 9);
                    }
                  while ((0x100000 & l) == 0L);
                  i = jjStopAtPos(2, 20);
                }
              while ((0x80 & l) == 0L);
              i = jjStopAtPos(2, 7);
            }
          while ((0x200000 & l) == 0L);
          i = jjStopAtPos(2, 21);
        }
      while ((0x8000 & l) == 0L);
      i = jjStopAtPos(2, 15);
    }
  }

  private final int jjStartNfaWithStates_0(int paramInt1, int paramInt2, int paramInt3)
  {
    int i;
    this.jjmatchedKind = paramInt2;
    this.jjmatchedPos = paramInt1;
    try
    {
      this.curChar = this.input_stream.readChar();
      i = jjMoveNfa_0(paramInt3, paramInt1 + 1);
      return i;
    }
    catch (IOException localIOException)
    {
      i = paramInt1 + 1;
    }
  }

  private final int jjStartNfaWithStates_1(int paramInt1, int paramInt2, int paramInt3)
  {
    int i;
    this.jjmatchedKind = paramInt2;
    this.jjmatchedPos = paramInt1;
    try
    {
      this.curChar = this.input_stream.readChar();
      i = jjMoveNfa_1(paramInt3, paramInt1 + 1);
      return i;
    }
    catch (IOException localIOException)
    {
      i = paramInt1 + 1;
    }
  }

  private final int jjStartNfaWithStates_2(int paramInt1, int paramInt2, int paramInt3)
  {
    int i;
    this.jjmatchedKind = paramInt2;
    this.jjmatchedPos = paramInt1;
    try
    {
      this.curChar = this.input_stream.readChar();
      i = jjMoveNfa_2(paramInt3, paramInt1 + 1);
      return i;
    }
    catch (IOException localIOException)
    {
      i = paramInt1 + 1;
    }
  }

  private final int jjStartNfa_0(int paramInt, long paramLong)
  {
    return jjMoveNfa_0(jjStopStringLiteralDfa_0(paramInt, paramLong), paramInt + 1);
  }

  private final int jjStartNfa_1(int paramInt, long paramLong)
  {
    return jjMoveNfa_1(jjStopStringLiteralDfa_1(paramInt, paramLong), paramInt + 1);
  }

  private final int jjStartNfa_2(int paramInt, long paramLong)
  {
    return jjMoveNfa_2(jjStopStringLiteralDfa_2(paramInt, paramLong), paramInt + 1);
  }

  private final int jjStopAtPos(int paramInt1, int paramInt2)
  {
    this.jjmatchedKind = paramInt2;
    this.jjmatchedPos = paramInt1;
    return (paramInt1 + 1);
  }

  private final int jjStopStringLiteralDfa_0(int paramInt, long paramLong)
  {
    int i;
    switch (paramInt)
    {
    default:
      i = -1;
    case 0:
    case 1:
    }
    while (true)
    {
      while (true)
      {
        while (true)
        {
          while (true)
          {
            return i;
            if ((0xFE7CF7F0 & paramLong) == 0L)
              break;
            this.jjmatchedKind = 35;
            i = -1;
          }
          i = -1;
        }
        if ((0xFE7CF7F0 & paramLong) == 0L)
          break;
        if (this.jjmatchedPos == 0)
        {
          this.jjmatchedKind = 35;
          this.jjmatchedPos = 0;
        }
        i = -1;
      }
      i = -1;
    }
  }

  private final int jjStopStringLiteralDfa_1(int paramInt, long paramLong)
  {
    return -1;
  }

  private final int jjStopStringLiteralDfa_2(int paramInt, long paramLong)
  {
    return -1;
  }

  void MoreLexicalActions()
  {
    int i = this.jjimageLen;
    int j = 1 + this.jjmatchedPos;
    this.lengthOfMatch = j;
    this.jjimageLen = (i + j);
    switch (this.jjmatchedKind)
    {
    case 41:
    default:
    case 39:
    case 40:
    case 42:
    case 43:
    case 44:
    }
    while (true)
    {
      do
      {
        while (true)
        {
          while (true)
          {
            while (true)
            {
              while (true)
              {
                return;
                if (this.image == null)
                  this.image = new StringBuffer();
                this.image.append(this.input_stream.GetSuffix(this.jjimageLen));
                this.jjimageLen = 0;
                this.image.deleteCharAt(this.image.length() - 2);
              }
              if (this.image == null)
                this.image = new StringBuffer();
              this.image.append(this.input_stream.GetSuffix(this.jjimageLen));
              this.jjimageLen = 0;
              commentNest = 1;
            }
            if (this.image == null)
              this.image = new StringBuffer();
            this.image.append(this.input_stream.GetSuffix(this.jjimageLen));
            this.jjimageLen = 0;
            this.image.deleteCharAt(this.image.length() - 2);
          }
          if (this.image == null)
            this.image = new StringBuffer();
          this.image.append(this.input_stream.GetSuffix(this.jjimageLen));
          this.jjimageLen = 0;
          commentNest = 1 + commentNest;
        }
        if (this.image == null)
          this.image = new StringBuffer();
        this.image.append(this.input_stream.GetSuffix(this.jjimageLen));
        this.jjimageLen = 0;
        commentNest -= 1;
      }
      while (commentNest != 0);
      SwitchTo(1);
    }
  }

  public void ReInit(SimpleCharStream paramSimpleCharStream)
  {
    this.jjnewStateCnt = 0;
    this.jjmatchedPos = 0;
    this.curLexState = this.defaultLexState;
    this.input_stream = paramSimpleCharStream;
    ReInitRounds();
  }

  public void ReInit(SimpleCharStream paramSimpleCharStream, int paramInt)
  {
    ReInit(paramSimpleCharStream);
    SwitchTo(paramInt);
  }

  public void SwitchTo(int paramInt)
  {
    if ((paramInt >= 3) || (paramInt < 0))
      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + paramInt + ". State unchanged.", 2);
    this.curLexState = paramInt;
  }

  public Token getNextToken()
  {
    Object localObject1 = null;
    int i = 0;
    try
    {
      this.curChar = this.input_stream.BeginToken();
      this.image = null;
      this.jjimageLen = 0;
      label546: label552: label335: switch (this.curLexState)
      {
      default:
        if (this.jjmatchedKind != 2147483647)
        {
          if (1 + this.jjmatchedPos < i)
            this.input_stream.backup(i - this.jjmatchedPos - 1);
          if ((jjtoToken[(this.jjmatchedKind >> 6)] & 1L << (0x3F & this.jjmatchedKind)) != 0L)
          {
            Token localToken3 = jjFillToken();
            localToken3.specialToken = localObject1;
            if (jjnewLexState[this.jjmatchedKind] != -1)
              this.curLexState = jjnewLexState[this.jjmatchedKind];
            localObject2 = localToken3;
            return localObject2;
          }
        }
      case 0:
      case 1:
      case 2:
      }
    }
    catch (IOException localIOException1)
    {
      while (true)
      {
        while (true)
        {
          while (true)
          {
            while (true)
            {
              this.jjmatchedKind = 0;
              Token localToken1 = jjFillToken();
              localToken1.specialToken = localObject1;
              Object localObject2 = localToken1;
            }
            this.jjmatchedKind = 2147483647;
            this.jjmatchedPos = 0;
            i = jjMoveStringLiteralDfa0_0();
          }
          this.jjmatchedKind = 2147483647;
          this.jjmatchedPos = 0;
          i = jjMoveStringLiteralDfa0_1();
        }
        this.jjmatchedKind = 2147483647;
        this.jjmatchedPos = 0;
        i = jjMoveStringLiteralDfa0_2();
      }
      if ((jjtoSkip[(this.jjmatchedKind >> 6)] & 1L << (0x3F & this.jjmatchedKind)) != 0L)
      {
        Token localToken2;
        if ((jjtoSpecial[(this.jjmatchedKind >> 6)] & 1L << (0x3F & this.jjmatchedKind)) != 0L)
        {
          localToken2 = jjFillToken();
          if (localObject1 != null)
            break label335;
          localObject1 = localToken2;
        }
        while (true)
        {
          while (true)
          {
            if (jjnewLexState[this.jjmatchedKind] == -1);
            this.curLexState = jjnewLexState[this.jjmatchedKind];
          }
          localToken2.specialToken = localObject1;
          localObject1.next = localToken2;
          localObject1 = localToken2;
        }
      }
      MoreLexicalActions();
      if (jjnewLexState[this.jjmatchedKind] != -1)
        this.curLexState = jjnewLexState[this.jjmatchedKind];
      i = 0;
      this.jjmatchedKind = 2147483647;
      try
      {
        this.curChar = this.input_stream.readChar();
      }
      catch (IOException localIOException3)
      {
        int j = this.input_stream.getEndLine();
        int k = this.input_stream.getEndColumn();
        String str = null;
        boolean bool = false;
        try
        {
          this.input_stream.readChar();
          this.input_stream.backup(1);
          if (!(bool))
          {
            this.input_stream.backup(1);
            if (i > 1)
              break label552;
            str = "";
          }
          throw new TokenMgrError(bool, this.curLexState, j, k, str, this.curChar, 0);
        }
        catch (IOException localIOException2)
        {
          while (true)
          {
            bool = true;
            if (i <= 1)
              str = "";
            while (true)
            {
              while (true)
              {
                if ((this.curChar != '\n') && (this.curChar != '\r'))
                  break label546;
                ++j;
                k = 0;
              }
              str = this.input_stream.GetImage();
            }
            ++k;
          }
          str = this.input_stream.GetImage();
        }
      }
    }
  }

  protected Token jjFillToken()
  {
    String str2;
    Token localToken = Token.newToken(this.jjmatchedKind);
    localToken.kind = this.jjmatchedKind;
    String str1 = jjstrLiteralImages[this.jjmatchedKind];
    if (str1 == null)
      str2 = this.input_stream.GetImage();
    while (true)
    {
      localToken.image = str2;
      localToken.beginLine = this.input_stream.getBeginLine();
      localToken.beginColumn = this.input_stream.getBeginColumn();
      localToken.endLine = this.input_stream.getEndLine();
      localToken.endColumn = this.input_stream.getEndColumn();
      return localToken;
      str2 = str1;
    }
  }

  public void setDebugStream(PrintStream paramPrintStream)
  {
    this.debugStream = paramPrintStream;
  }
}